package com.littcore.saap.message.biz.impl;

import java.util.List;

import javax.annotation.Resource;

import com.littcore.saap.core.web.util.LoginUtils;
import com.littcore.saap.message.biz.IAfficheBizService;
import com.littcore.saap.message.biz.IMessageBizService;
import com.littcore.saap.message.message.AffichePublishMessage;
import com.littcore.saap.message.po.Affiche;
import com.littcore.saap.message.service.IAfficheService;
import com.littcore.saap.message.vo.AfficheVo;
import com.littcore.saap.system.po.TenantMember;
import com.littcore.saap.system.service.ITenantMemberService;
import com.littcore.util.BeanCopier;


/**
 * .
 * 
 * <pre><b>描述：</b>
 *    
 * </pre>
 * 
 * <pre><b>修改记录：</b>
 *    
 * </pre>
 * 
 * @author <a href="mailto:littcai@hotmail.com">蔡源</a>
 * @since 2015年11月24日
 * @version 1.0
 */
public class AfficheBizServiceImpl implements IAfficheBizService {
  
  @Resource
  private IAfficheService afficheService;
  @Resource
  private ITenantMemberService tenantMemberService;
  @Resource
  private IMessageBizService messageBizService;
  
  /* (non-Javadoc)
   * @see com.littcore.saap.message.biz.impl.IAfficheBizService#save(com.littcore.saap.message.po.Affiche)
   */
  @Override
  public Integer save(Affiche affiche)
  {
    afficheService.save(affiche);
    this.publishMessage(affiche);
    
    return affiche.getId();
  }
  
  /* (non-Javadoc)
   * @see com.littcore.saap.message.biz.impl.IAfficheBizService#update(com.littcore.saap.message.po.Affiche)
   */
  @Override
  public void update(Affiche affiche) 
  {
    afficheService.update(affiche);
    this.publishMessage(affiche);
  }
  
  /* (non-Javadoc)
   * @see com.littcore.saap.message.biz.impl.IAfficheBizService#doPublish(java.lang.Integer)
   */
  @Override
  public void doPublish(Integer id) 
  {
    Affiche affiche = afficheService.load(id);
    
    if(!affiche.getIsChecked())
    {
      affiche.setIsChecked(true);
      afficheService.update(affiche);
    }  
    publishMessage(affiche);   
  }
  
  /**
   * 这里接收人为所有有效成员.
   * @param affiche
   */
  private void publishMessage(Affiche affiche)
  {
    if(affiche.getIsChecked())
    {
      AfficheVo vo = BeanCopier.copy(affiche, AfficheVo.class);      
      
      List<TenantMember> tenantMemberList = tenantMemberService.listValidByTenant(affiche.getTenantId());
      for (TenantMember tenantMember : tenantMemberList)
      {  
        AffichePublishMessage message = new AffichePublishMessage(vo);
        message.setReceiveBy(tenantMember.getUserId());

        messageBizService.publish(message);
      }
    }
  }

}
